import { ListNode } from "./00-utils";
/**
 * 有序链表合并
 * @param l1 有序的链表
 * @param l2 有序的链表
 */
function mergeListNode(l1: ListNode, l2: ListNode) {
  // 定义链表结点,确保链表可以被访问到
  const head = new ListNode(0);
  // 定义当前节点,就是链表穿针引线的枕
  let cur = head;
  // 开始遍历链表,将枕在l1和l2之间来回穿梭
  while (l1 && l2) {
    // 如果l1的结点值较小
    if (l1!.val! <= l2!.val!) {
      cur.next = l1;
      // l1的指针向前一步
      l1 = l1.next as ListNode;
    } else {
      cur.next = l2;
      // l2的指针向前一步
      l2 = l2.next as ListNode;
    }
    // 针在串起一个结点之后,也向前一步
    cur = cur.next;
  }
  // 处理链表不等长的情况
  cur.next = l1 != null ? l1 : l2;
  return head;
}

const l1 = new ListNode(1);
l1.next = new ListNode(2);
l1.next.next = new ListNode(4);

const l2 = new ListNode(1);
l2.next = new ListNode(3);
l2.next.next = new ListNode(4);

const result = mergeListNode(l1, l2);
console.log(JSON.stringify(result));
